// P0784R7
// { dg-do compile { target c++20 } }
// { dg-additional-options "-fdelete-null-pointer-checks" }

struct S { constexpr S () : s (5) {} constexpr S (int x) : s (x) {} int s; };

constexpr bool
foo ()
{
  int r = 0;
  S *p = new S ();
  p->s += 3;
  r += p->s;
  delete p;
  p = new S (12);
  p->s = p->s * 2;
  r += p->s;
  delete p;
  int *q = new int;
  *q = 25;
  r += *q;
  delete q;
  q = new int (1);
  r += *q;
  if (!q)
    return false;
  delete q;
  q = new int[5]{1,2,3,4,5};
  r += q[0] + q[4];
  delete[] q;
  q = new int[4];
  q[0] = 6;
  q[1] = 7;
  q[3] = 8;
  r += q[0] + q[1] + q[3];
  delete[] q;
  return r == 5 + 3 + 2 * 12 + 25 + 1 + 1 + 5 + 6 + 7 + 8;
}
constexpr bool a = foo ();
static_assert (a);
